// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export const ipcMore = (context) => {
  //   context.pinia // 使用 `createPinia()` 创建的 pinia
  //   context.app // 使用 `createApp()` 创建的当前应用程序（仅限 Vue 3）
  //   context.store // 插件正在扩充的 store
  //   context.options // 定义存储的选项对象传递给`defineStore()`
  // ...
  const store = context.store.$state;
  context.store.$subscribe(() => {
    // 在存储变化的时候执行
    window.electron.ipcRenderer.invoke('pinia-store-change', JSON.stringify(store))
  })

  window.electron.ipcRenderer.on('pinia-store-set', (_, jsonStr: string) => {
    const obj = JSON.parse(jsonStr)
    const keys = Object.keys(obj)
    const values = Object.values(obj);

    // 更新各个key对应的值的状态
    for (let i = 0; i < keys.length; i++) {
      changeState(store, keys[i], values[i])
    }
  })

}

/**
 * 修改state的值
 * 补充 如果反序列化的字段是map类型，需要额外处理
 */
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-explicit-any
function changeState(state: any, key: any, value: any) {
  if (state[key] instanceof Map) {
    if (value instanceof Array) {
      state[key] = new Map(value);
    } else {
      state[key] = new Map(Object.entries(value as object));
    }
  } else {
    state[key] = value;
  }
}